home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / editor / mail2gui.lha / Mail2guide.c < prev    next >
C/C++ Source or Header  |  1995-11-17  |  8KB  |  296 lines

  1. /*
  2.   Mail2guide by CTS
  3. */
  4. /*+ "includes and defines" */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #define MAXL 128
  10. #define english 1
  11. /* english 1 for english error messages, anything else for german */
  12. /*- */
  13. const char ver[]  = "$VER: Mail2guide 0.13 (17.11.1995)";
  14. const char space80[]="                                                                                ";
  15.  
  16. /*+ "Subroutines" */
  17. /*+ "usage()" */
  18. void usage()
  19. {   printf("Usage: Mail2guide <infile.mail> <outfile.guide>\n");
  20. }
  21. /*- */
  22. /*+ "fin_error()" */
  23. void fin_error()
  24. #if english == 1
  25. {   printf("Can't open input file.\n"); }
  26. #else
  27. {   printf("Kann Eingabedatei nicht öffnen.\n"); }
  28. #endif
  29. /*- */
  30. /*+ "fout_error()" */
  31. void fout_error()
  32. #if english == 1
  33. {   printf("Can't open output file.\n"); }
  34. #else
  35. {   printf("Kann Ausgabedatei nicht öffnen.\n"); }
  36. #endif
  37. /*- */
  38. /*+ "fout_exists()" */
  39. void fout_exists()
  40. #if english == 1
  41. {   printf("output file exists!\n"); }
  42. #else
  43. {   printf("Ausgabedatei existiert schon!\n"); }
  44. #endif
  45. /*- */
  46. /*+ "tmp_error()" */
  47. void tmp_error()
  48. #if english == 1
  49. {   printf("Can't open tmp file.\n"); }
  50. #else
  51. {   printf("Kann tmp datei nicht öffnen.\n"); }
  52. #endif
  53. /*- */
  54. /*+ "help()" */
  55. void help()
  56. #if english == 1
  57. {   printf("This program converts a mail file to a file readable with AmigaGuide.\n\n"); }
  58. #else
  59. {   printf("Dieses Program wandelt ein mail file in eine AmigaGuide datei.\n\n"); }
  60. #endif
  61. /*- */
  62. /*+ "del_at(lin)" */
  63. void del_at(lin)
  64. char lin[MAXL];
  65. {   int i;
  66.  
  67.     i=0;
  68.     while (lin[i]!=0)
  69.     {
  70.        if (lin[i]=='@') { lin[i]='*'; }
  71.        i++;
  72.     }
  73. }
  74. /*- */
  75. /*+ "del_quote(lin)" */
  76. void del_quote(lin)
  77. char lin[MAXL];
  78. {   int i;
  79.  
  80.     i=0;
  81.     while (lin[i]!=0)
  82.     {
  83.        if (lin[i]=='"') { lin[i]='\''; }
  84.        i++;
  85.     }
  86. }
  87. /*- */
  88. /*- */
  89.  
  90. /*+ "main(argc,argv)" */
  91. main(argc,argv)
  92. int argc;
  93. char *argv[];
  94. {   long int  i,j,k;
  95.     FILE *in,*out,*tmp;
  96.     int header,body,from_to,subject;
  97.     char line[MAXL],title[MAXL],name[MAXL],from_to_name[MAXL],nline[MAXL];
  98.  
  99. /*+ "Copyright" */
  100.     printf ("%s\n",ver+6);
  101.     printf ("(C)1995 Christian T. Steigies (steigies@physik.uni-kiel.d400.de)\n");
  102.     printf ("Freeware, NO commercial usage ;-)\n\n");
  103. /*- */
  104. /*+ "in und out files checken, öffnen" */
  105.     if  (argc==2)
  106.     {   if ( !( strcmp(argv[1],"-h") ) || !( strcmp(argv[1],"?") ) )
  107.         {
  108.           atexit(&usage);
  109.           atexit(&help);
  110.           exit(EXIT_SUCCESS);
  111.         }
  112.     }
  113.  
  114.     if  (argc!=3)
  115.     {   atexit(&usage);
  116.         exit(EXIT_SUCCESS);
  117.     }
  118.  
  119.     if  ((in=fopen(argv[1],"r"))==0) /* Eingabefile zum lesen öffnen */
  120.     {   atexit(&usage);
  121.         atexit(&fin_error);
  122.         exit(EXIT_SUCCESS);
  123.     }
  124.  
  125.     if  ((out=fopen(argv[2],"r"))==0) /* Ausgabefile öffnen */
  126.     {
  127.         if  ((out=fopen(argv[2],"w"))==0)
  128.         {   atexit(&usage); atexit(&fout_error); exit(EXIT_SUCCESS); }
  129.     }
  130.     else /* file existiert schon! */
  131.     {   atexit(&usage); atexit(&fout_exists); exit(EXIT_SUCCESS); }
  132.  
  133.     if  ((tmp=tmpfile())==0) /* tmp file öffnen */
  134.     {   atexit(&tmp_error);
  135.         exit(EXIT_SUCCESS);
  136.     }
  137.  
  138. /*- */
  139. /*+ "Variablen initialisieren" */
  140.     printf("converting %s to %s\n\n",argv[1],argv[2]);
  141.     fprintf(out,"@DATABASE Mail2guide.guide\n\n");
  142.     fprintf(out,"@MASTER mail file: %s\n\n",argv[1]);
  143.     fprintf(out,"@WIDTH 74\n\n");
  144.  
  145.     i=0;j=0; /* i: Zeilen einer mail, j: # der mails */
  146.     header=0;body=0;
  147.     from_to=0;subject=0;
  148. /*- */
  149. /*+ "Headerbeginn suchen" */
  150.     while ( !feof(in) )
  151.     {   fgets(line,80,in);
  152.         if ( header==0 && 0==strncmp(line,"From ",5) )
  153.         {  j++;
  154.            if ( body==1 )
  155.            {  fprintf(out,"@ENDNODE\n\n");
  156.            }
  157.            header=1; body=0; from_to=0; subject=0;
  158.            fprintf(out,"@NODE h%08i \"%s",j,line); /* nur ein " reicht! */
  159.            fprintf(out,"@PREV h%08i\n",j-1);
  160.            fprintf(out,"@NEXT h%08i\n",j+1);
  161.            fprintf(out,"@TOC main\n");
  162.         }
  163. /*- */
  164. /*+ "Header NODE" */
  165.         if ( header==1 )
  166.         {
  167.            del_at(line);
  168.            fprintf(out,"%s",line);
  169.         }
  170. /*- */
  171. /*+ "Absender suchen" */
  172.         if ( header==1 && from_to==0 && 0==strncmp(line,"From: ",6) )
  173.         {  strcpy(name,line+6);
  174.            strcpy(from_to_name,line);
  175.            from_to=1;
  176.         }
  177. /*- */
  178. /*+ "Empfänger suchen" */
  179.         if ( header==1 && from_to==0 && 0==strncmp(line,"To: ",4) )
  180.         {  strcpy(name,line+4);
  181.            strcpy(from_to_name,line);
  182.            from_to=1;
  183.         }
  184. /*- */
  185. /*+ "Subject suchen" */
  186.         if ( header==1 && subject==0 && 0==strncmp(line,"Subject: ",9) )
  187.         {  strcpy(title,line+9);
  188.            subject=1;
  189.         }
  190. /*- */
  191. /*+ "Header Ende suchen" */
  192.         if ( header==1 && line[1]==0 ) /* Leerzeile ist header-ende */
  193.         {  body=1; header=0;
  194.            do
  195.            { if (!feof(in))
  196.                 { fgets(line,80,in);
  197.                   i++;
  198.                 }
  199.            }
  200.            while ( line[1]==0 && !feof(in) );
  201.            /* Leerzeilen zwischen header und body entfernen */
  202.            fprintf(out,"\n                    @{\"      Read the mail      \" LINK m%08i }\n",j);
  203.            fprintf(out,"@ENDNODE\n\n",j);
  204.            fprintf(out,"@NODE m%08i \"%s",j,from_to_name);
  205.            /* nur ein " reicht! */
  206.            fprintf(out,"@PREV m%08i\n",j-1);
  207.            fprintf(out,"@NEXT m%08i\n",j+1);
  208.            fprintf(out,"@TOC main\n");
  209.            fprintf(out,"                    @{\"      Read the header      \" LINK h%08i }\n\n",j);
  210.            if ( from_to==1 )
  211.            {  fprintf(tmp,"%s",name);
  212.            }
  213.            else
  214.            {  fprintf(tmp,"nobody...\n");
  215.            }
  216.            printf("%s",name);
  217.            if ( subject==1 )
  218.            {  fprintf(tmp,"%s",title);
  219.            }
  220.            else
  221.            {  fprintf(tmp," <none> \n");
  222.            }
  223.            printf("%s",title);
  224.         }
  225. /*- */
  226. /*+ "Body NODE" */
  227.         if ( body==1 )
  228.         {
  229.            del_at(line);
  230.            fprintf(out,"%s",line);
  231.         }
  232.     }
  233.     fprintf(out,"@ENDNODE\n");
  234. /*- */
  235. /*+ "empty body before 1" */
  236.     fprintf(out,"@NODE m%08i \"This mail does not exist\"\n",0);
  237.     fprintf(out,"@PREV m%08i\n",0);
  238.     fprintf(out,"@NEXT m%08i\n",1);
  239.     fprintf(out,"@TOC main\n");
  240.     fprintf(out,"This mail exists only in your imagination...\n");
  241.     fprintf(out,"@ENDNODE\n");
  242. /*- */
  243. /*+ "empty body after last" */
  244.     fprintf(out,"@NODE m%08i \"This mail does not exist\"\n",j+1);
  245.     fprintf(out,"@PREV m%08i\n",j);
  246.     fprintf(out,"@NEXT m%08i\n",j+1);
  247.     fprintf(out,"@TOC main\n");
  248.     fprintf(out,"This mail exists only in your imagination...\n");
  249.     fprintf(out,"@ENDNODE\n");
  250. /*- */
  251. /*+ "empty header before 1" */
  252.     fprintf(out,"@NODE h%08i \"I'm serious! This mail does NOT exist!\"\n",0);
  253.     fprintf(out,"@PREV h%08i\n",0);
  254.     fprintf(out,"@NEXT h%08i\n",1);
  255.     fprintf(out,"@TOC main\n");
  256.     fprintf(out,"This mail exists only in your imagination...\n");
  257.     fprintf(out,"@ENDNODE\n");
  258. /*- */
  259. /*+ "empty header after last" */
  260.     fprintf(out,"@NODE h%08i \"I'm serious! This mail does NOT exist!\"\n",j+1);
  261.     fprintf(out,"@PREV h%08i\n",j);
  262.     fprintf(out,"@NEXT h%08i\n",j+1);
  263.     fprintf(out,"@TOC main\n");
  264.     fprintf(out,"This mail exists only in your imagination...\n");
  265.     fprintf(out,"@ENDNODE\n");
  266. /*- */
  267. /*+ "main NODE" */
  268.     fsetpos(tmp,0);
  269.     fprintf(out,"@NODE main \"Guide for %s\"\n",argv[1]);
  270.     fprintf(out,"@PREV main\n");
  271.     fprintf(out,"@NEXT main\n");
  272.     fprintf(out,"This is an AmigaGuide® file made by Mail2guide\n\n");
  273.     for(k=1; k<=j; k++)
  274.     {  fgets(name,80,tmp);
  275.        del_quote(name);
  276.        name[strlen(name)-1]=0;
  277.        strcat(name,space80);
  278.        fprintf(out,"@{\" %-41.41s \" LINK m%08i } ",name,k);
  279.        fgets(title,80,tmp);
  280.        del_quote(title);
  281.        title[strlen(title)-1]=0;
  282.        strcat(title,space80);
  283.        fprintf(out,"@{\" %-41.41s \" LINK h%08i }\n",title,k);
  284.     }
  285.     fprintf(out,"@ENDNODE\n");
  286. /*- */
  287. /*+ "files schliessen" */
  288.     fclose(out);
  289.     fclose(in);
  290.     printf("\nReady.\n");
  291.     exit(EXIT_SUCCESS);
  292. /*- */
  293. }
  294. /*- */
  295.  
  296.